﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Npgsql;
using LayerEntity.Hotel;
using LayerData.DataBaseManager;
using System.Data;

namespace LayerData.Hotel
{
    public class DHotel
    {
        #region Variables
        readonly string mensajeExecuteReader = "Error al Recuperar #replace, revise lo Siguiente: ";
        readonly IPostgreSqlConnectionInfo connectionInfo;
        #endregion
        #region Contructores
        public DHotel()
        {
            this.connectionInfo = ObjectFactory.CreateConnectionInfo();
        }

        public DHotel(IPostgreSqlConnectionInfo con)
        {
            this.connectionInfo = con;
        }

        #endregion


        /// <summary>
        /// Obtiene los Hoteles >.Registrados
        /// </summary>
        /// <returns>
        /// Un <see cref="T:List"/> con los Resultados del Comando
        /// </returns>
        public List<EHotel> GetHoteles()
        {
            NpgsqlDataReader dr = null;
            List<EHotel> hotel = new List<EHotel>();
            try
            {
                dr = PostgreSqlHelper.ExecuteReader(this.connectionInfo, CommandType.Text, "select * from hotel.v_listar_hotel");
                if (dr != null)
                {
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            hotel.Add(new EHotel(dr));
                        }
                    }
                }
            }
            catch (NpgsqlException ex)
            {
                DataBaseUtils.PrintMessajeError(this.mensajeExecuteReader.Replace("#replace", " Los Hoteles"), ex);
            }
            finally
            {
                DataBaseUtils.CloseNPgsqlDataReader(dr);
            }
            return hotel;
        }





        /// <summary>
        /// Obtiene los Pisos del Hotel >.Registrados
        /// </summary>
        /// <returns>
        /// Un <see cref="T:List"/> con los Resultados del Comando
        /// </returns>
        public List<EPisos> GetPisosHotel()
        {
            NpgsqlDataReader dr = null;
            List<EPisos> pisos = new List<EPisos>();
            try
            {
                dr = PostgreSqlHelper.ExecuteReader(this.connectionInfo, CommandType.Text, "select * from hotel.v_listar_pisos_hotel");
                if (dr != null)
                {
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            pisos.Add(new EPisos(dr));
                        }
                    }
                }
            }
            catch (NpgsqlException ex)
            {
                DataBaseUtils.PrintMessajeError(this.mensajeExecuteReader.Replace("#replace", " Los Pisos"), ex);
            }
            finally
            {
                DataBaseUtils.CloseNPgsqlDataReader(dr);
            }
            return pisos;
        }





        /// <summary>
        /// Obtiene los Tipos de Habitaciones >.Registrados
        /// </summary>
        /// <returns>
        /// Un <see cref="T:List"/> con los Resultados del Comando
        /// </returns>
        public List<ETipoHabitacion> GetTiposHabitaciones()
        {
            NpgsqlDataReader dr = null;
            List<ETipoHabitacion> TipHabitacion = new List<ETipoHabitacion>();
            try
            {
                dr = PostgreSqlHelper.ExecuteReader(this.connectionInfo, CommandType.Text, "select * from hotel.tb_tipohabitacion");
                if (dr != null)
                {
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            TipHabitacion.Add(new ETipoHabitacion(dr));
                        }
                    }
                }
            }
            catch (NpgsqlException ex)
            {
                DataBaseUtils.PrintMessajeError(this.mensajeExecuteReader.Replace("#replace", " Los tipos de Habitacion"), ex);
            }
            finally
            {
                DataBaseUtils.CloseNPgsqlDataReader(dr);
            }
            return TipHabitacion;
        }
    }

}
  


